﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using E4RPTools;

namespace Fitecom
{
    public class Database
    {
       
        private static int GetIntLineFieldValue(SqlTransaction sqlTransaction, string id, string tableName, string fieldName)
        {
            const string query = 
                @"  select	{1} 
                    from	{0} 
                    where	Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
                return sqlDataAccess.ExecuteScalar(sqlTransaction, Convert.ToInt32(0), string.Format(query, tableName, fieldName), new SqlParameter("Id", id));
        }

        private static Single GetSingleLineFieldValue(SqlTransaction sqlTransaction, string id, string tableName, string fieldName)
        {
            const string query =
                @"  select	{1} 
                    from	{0} 
                    where	Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
                return sqlDataAccess.ExecuteScalar(sqlTransaction, Convert.ToSingle(0), string.Format(query, tableName, fieldName), new SqlParameter("Id", id));
        }

        private static string GetStringLineFieldValue(SqlTransaction sqlTransaction, string id, string tableName, string fieldName)
        {
            const string query =
                @"  select	{1} 
                    from	{0} 
                    where	Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
                return sqlDataAccess.ExecuteScalar(sqlTransaction, "", string.Format(query, tableName, fieldName), new SqlParameter("Id", id));
        }

//        public static void UpdateReference(SqlTransaction sqlTransaction, string id, string fieldName, object value)
//        {
//            const string query =
//                @"  select	{0} 
//                    from	LinhasDoc 
//                    where	Id = @Id";
//            var sqlParameters = new List<SqlParameter>
//                                            {
//                                                new SqlParameter("Id", id),
//                                                new SqlParameter("Value", value)
//                                            };
//            using (var sqlDataAccess = new SqlDataAccess())
//                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, fieldName), sqlParameters.ToArray());
//        }

        public static void UpdateStockLine(SqlTransaction sqlTransaction, string id, string loteObs, Single peso, Single quantidadeComDefeito, int notas, Single pesoEmbalagem, string unidadePeso,
            int loteFabrico, Single largura)
        {
            const string query =
                @"  update  LinhasSTK
                    set     CDU_LoteObs = @LoteObs,
                            CDU_Peso = @Peso,
                            CDU_QuantidadeComDefeito = @QuantidadeComDefeito,
                            CDU_Notas = @Notas,
                            CDU_PesoEmbalagem = @PesoEmbalagem,
                            CDU_UnidadePeso = @UnidadePeso,
                            CDU_LoteFabrico = @LoteFabrico,
                            CDU_Largura = @Largura
                    where   Id = @Id";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Id", id),
                                                new SqlParameter("LoteObs", loteObs),
                                                new SqlParameter("Peso", peso),
                                                new SqlParameter("QuantidadeComDefeito", quantidadeComDefeito),
                                                new SqlParameter("Notas", notas),
                                                new SqlParameter("PesoEmbalagem", pesoEmbalagem),
                                                new SqlParameter("UnidadePeso", unidadePeso),
                                                new SqlParameter("LoteFabrico", loteFabrico),
                                                new SqlParameter("Largura", largura)
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, query, sqlParameters.ToArray());
        }

        public static void UpdateArtigoArmazem(SqlTransaction sqlTransaction, string artigo, string armazem, string lote, string loteObs, Single peso, Single quantidadeComDefeito, int notas, Single pesoEmbalagem, string unidadePeso,
            int loteFabrico, Single largura)
        {
            const string query =
                @"  update  ArtigoArmazem
                    set     CDU_LoteObs = case when CDU_LoteObs is null then @LoteObs else CDU_LoteObs + @LoteObs end,
                            CDU_Peso = (case when cdu_Peso is null then 0 else cdu_peso end) +  @Peso,
                            CDU_QuantidadeComDefeito = (case when CDU_QuantidadeComDefeito is null then 0 else CDU_QuantidadeComDefeito end) + @QuantidadeComDefeito,
                            CDU_Notas = (case when CDU_Notas is null then 0 else CDU_Notas end) +  @Notas,
                            CDU_PesoEmbalagem = @PesoEmbalagem,
                            CDU_UnidadePeso = @UnidadePeso,
                            CDU_LoteFabrico = @LoteFabrico,
                            CDU_Largura = @Largura
                    where   Artigo = @Artigo
                            and Armazem = @Armazem
                            and Lote = @Lote";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("LoteObs", loteObs),
                                                new SqlParameter("Peso", peso),
                                                new SqlParameter("QuantidadeComDefeito", quantidadeComDefeito),
                                                new SqlParameter("Notas", notas),
                                                new SqlParameter("PesoEmbalagem", pesoEmbalagem),
                                                new SqlParameter("UnidadePeso", unidadePeso),
                                                new SqlParameter("LoteFabrico", loteFabrico),
                                                new SqlParameter("Largura", largura)
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, query, sqlParameters.ToArray());
        }

        public static bool ExistsWarehouseArticleWeight(SqlTransaction sqlTransaction, string artigo, string armazem, string lote, string localizacao)
        {
            const string query =
                @"  select  count(*)
                    from    ArtigoArmazem
                    where   Artigo = @Artigo
                            and Armazem = @Armazem
                            and Lote = @Lote
                            and Localizacao = @Localizacao";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("Localizacao", localizacao)
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                return sqlDataAccess.ExecuteScalar(sqlTransaction, 0, query, sqlParameters.ToArray()) > 0;
        }

        public static double GetWarehouseArticleWeight(SqlTransaction sqlTransaction, string artigo, string armazem, string lote, string localizacao)
        {
           // if(!ExistsWarehouseArticleWeight(sqlTransaction, artigo, armazem, lote, localizacao)) return 0;
            const string query =
                @"  select  CDU_Peso
                    from    ArtigoArmazem
                    where   Artigo = @Artigo
                            and Armazem = @Armazem
                            and Lote = @Lote
                            and Localizacao = @Localizacao";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("Localizacao", localizacao)
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                return Convert.ToDouble(sqlDataAccess.ExecuteScalar(sqlTransaction, Convert.ToDouble(0), query, sqlParameters.ToArray()));
        }

        public static void UpdateWarehouseArticleWeight(SqlTransaction sqlTransaction, string artigo, string armazem, string lote, string localizacao, double weight)
        {
            const string query =
                @"  update  ArtigoArmazem
                    set     CDU_Peso = @Weight
                    where   Artigo = @Artigo
                            and Armazem = @Armazem
                            and Lote = @Lote
                            and Localizacao = @Localizacao";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("Localizacao", localizacao),
                                                new SqlParameter("Weight", weight)
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, query, sqlParameters.ToArray());
        }

        public static void ResetWarehouseArticle(SqlTransaction sqlTransaction, string artigo, string armazem, string lote, string localizacao)
        {
            const string query =
                @"  update  ArtigoArmazem
                    set     CDU_LoteObs = null,
                            CDU_Peso = 0,
                            CDU_QuantidadeComDefeito = null,
                            CDU_Notas = null,
                            CDU_PesoEmbalagem = null,
                            CDU_UnidadePeso = null,
                            CDU_LoteFabrico = null,
                            CDU_Largura = null
                    where   Artigo = @Artigo
                            and Armazem = @Armazem
                            and Lote = @Lote
                            and Localizacao = @Localizacao";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("Localizacao", localizacao)
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, query, sqlParameters.ToArray());
        }

        public static void UpdateWarehouseWithSellItem(SqlTransaction sqlTransaction, string id, string artigo, string armazem, string lote, string localizacao)
        {
            const string query =
                 @" update  ArtigoArmazem
                    set     CDU_LoteObs = case when CDU_LoteObs is null then @LoteObs else CDU_LoteObs + @LoteObs end,
                            CDU_Peso = (case when cdu_Peso is null then 0 else cdu_peso end) +  @Peso,
                            CDU_QuantidadeComDefeito = (case when CDU_QuantidadeComDefeito is null then 0 else CDU_QuantidadeComDefeito end) + @QuantidadeComDefeito,
                            CDU_Notas = (case when CDU_Notas is null then 0 else CDU_Notas end) +  @Notas,
                            CDU_PesoEmbalagem = @PesoEmbalagem,
                            CDU_UnidadePeso = @UnidadePeso,
                            CDU_LoteFabrico = @LoteFabrico,
                            CDU_Largura = @Largura
                    where	Artigo = @Artigo
                            and Armazem = @Armazem
                            and Lote = @Lote
                            and Localizacao = @Localizacao";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("Localizacao", localizacao),
                                                new SqlParameter("LoteObs", GetStringLineFieldValue(sqlTransaction, id, "LinhasDoc", "CDU_LoteObs")),
                                                new SqlParameter("Peso", GetSingleLineFieldValue(sqlTransaction, id, "LinhasDoc", "CDU_Peso")),
                                                new SqlParameter("QuantidadeComDefeito", GetSingleLineFieldValue(sqlTransaction, id, "LinhasDoc", "CDU_QuantidadeComDefeito")),
                                                new SqlParameter("Notas", GetIntLineFieldValue(sqlTransaction, id, "LinhasDoc", "CDU_Notas")),
                                                new SqlParameter("PesoEmbalagem", GetSingleLineFieldValue(sqlTransaction, id, "LinhasDoc", "CDU_PesoEmbalagem")),
                                                new SqlParameter("UnidadePeso", GetStringLineFieldValue(sqlTransaction, id, "LinhasDoc", "CDU_UnidadePeso")),
                                                new SqlParameter("LoteFabrico", GetIntLineFieldValue(sqlTransaction, id, "LinhasDoc", "CDU_LoteFabrico")),
                                                new SqlParameter("Largura", GetSingleLineFieldValue(sqlTransaction, id, "LinhasDoc", "CDU_Largura"))
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, query, sqlParameters.ToArray());
        }

        private static SqlParameter[] GetUpdateSellItemParameters(string id, string artigo, string armazem, string lote, string localizacao)
        {
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("Localizacao", localizacao),
                                                new SqlParameter("Id", id)
                                            };
            return sqlParameters.ToArray();
        }

        public static void UpdateSellItem(SqlTransaction sqlTransaction, string id, string artigo, string armazem, string lote, string localizacao)
        {
            string query =
                @"  update	LinhasDoc
                    set		{0} = (
			                    select	{0}
			                    from	ArtigoArmazem
			                    where	Artigo = @Artigo
                                        and Armazem = @Armazem
                                        and Lote = @Lote
                                        and Localizacao = @Localizacao)
                    where	Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
            {
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_LoteObs"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                ////sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "cdu_peso"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_Notas"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_QuantidadeComDefeito"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_PesoEmbalagem"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_UnidadePeso"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_LoteFabrico"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_Largura"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
            }            
        }

        private static SqlParameter[] GetUpdateSellItemParameters(string id, string artigo, string armazem, string lote)
        {
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("Id", id)
                                            };
            return sqlParameters.ToArray();
        }

        public static void UpdateSellItem(SqlTransaction sqlTransaction, string id, string artigo, string armazem, string lote)
        {
            string query =
                @"  update	LinhasDoc
                    set		{0} = (
			                    select	top 1 {0}
			                    from	ArtigoArmazem
			                    where	Artigo = @Artigo
                                        and Armazem = @Armazem
                                        and Lote = @Lote)
                    where	Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
            {
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_LoteObs"), GetUpdateSellItemParameters(id, artigo, armazem, lote));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "cdu_peso"), GetUpdateSellItemParameters(id, artigo, armazem, lote));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_Notas"), GetUpdateSellItemParameters(id, artigo, armazem, lote));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_QuantidadeComDefeito"), GetUpdateSellItemParameters(id, artigo, armazem, lote));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_PesoEmbalagem"), GetUpdateSellItemParameters(id, artigo, armazem, lote));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_UnidadePeso"), GetUpdateSellItemParameters(id, artigo, armazem, lote));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_LoteFabrico"), GetUpdateSellItemParameters(id, artigo, armazem, lote));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_Largura"), GetUpdateSellItemParameters(id, artigo, armazem, lote));
            }
        }

        public static void UpdateSellItemWeitght(SqlTransaction sqlTransaction, string id, double weight)
        {
            const string query =
                @"  update	LinhasDoc
                    set		cdu_peso = @Peso
                    where	Id = @Id";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Id", id),
                                                new SqlParameter("Peso", weight)
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, query, sqlParameters.ToArray());
        }


        
        public static string GetStockDocumentFilial(SqlTransaction sqlTransaction, string stockId)
        {
            const string query =
                @"  select  Filial
                    from    CabecSTK
                    where   Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
                return sqlDataAccess.ExecuteScalar(sqlTransaction, "", query, new SqlParameter("Id", stockId));
        }

        public static string GetStockDocumentTipoDoc(SqlTransaction sqlTransaction, string stockId)
        {
            const string query =
                @"  select  TipoDoc
                    from    CabecSTK
                    where   Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
                return sqlDataAccess.ExecuteScalar(sqlTransaction, "", query, new SqlParameter("Id", stockId));
        }

        public static string GetStockDocumentSerie(SqlTransaction sqlTransaction, string stockId)
        {
            const string query =
                @"  select  Serie
                    from    CabecSTK
                    where   Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
                return sqlDataAccess.ExecuteScalar(sqlTransaction, "", query, new SqlParameter("Id", stockId));
        }

        public static int GetStockDocumentNumDoc(SqlTransaction sqlTransaction, string stockId)
        {
            const string query =
                @"  select  NumDoc
                    from    CabecSTK
                    where   Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
                return sqlDataAccess.ExecuteScalar(sqlTransaction, 0, query, new SqlParameter("Id", stockId));
        }

        public static double GetWarehouseArticleStock(SqlTransaction sqlTransaction, string artigo, string armazem, string lote, string localizacao)
        {
            const string query =
                @"  select  StkActual
                    from    ArtigoArmazem
                    where   Artigo = @Artigo
                            and Armazem = @Armazem
                            and Lote = @Lote
                            and Localizacao = @Localizacao";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("Localizacao", localizacao)
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                return Convert.ToDouble(sqlDataAccess.ExecuteScalar(sqlTransaction, Convert.ToDouble(0), query, sqlParameters.ToArray()));
        }

        public static void UpdateStockItem(SqlTransaction sqlTransaction, string id, string artigo, string armazem, string lote, string localizacao)
        {
            string query =
                @"  update	LinhasDoc
                    set		{0} = (
			                    select	{0}
			                    from	ArtigoArmazem
			                    where	Artigo = @Artigo
                                        and Armazem = @Armazem
                                        and Lote = @Lote
                                        and Localizacao = @Localizacao)
                    where	Id = @Id";
            using (var sqlDataAccess = new SqlDataAccess())
            {
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_LoteObs"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_Notas"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_QuantidadeComDefeito"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_PesoEmbalagem"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_UnidadePeso"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_LoteFabrico"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, string.Format(query, "CDU_Largura"), GetUpdateSellItemParameters(id, artigo, armazem, lote, localizacao));
            }
        }

        public static void UpdateStockItemWeitght(SqlTransaction sqlTransaction, string id, double weight)
        {
            const string query =
                @"  update	LinhasStk
                    set		cdu_peso = @Peso
                    where	Id = @Id";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Id", id),
                                                new SqlParameter("Peso", weight)
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, query, sqlParameters.ToArray());
        }

        
        
        public static void UpdateWarehouseWithStockItem(SqlTransaction sqlTransaction, string id, string artigo, string armazem, string lote, string localizacao)
        {
            const string query =
                 @" update  ArtigoArmazem
                    set     CDU_LoteObs = case when CDU_LoteObs is null then @LoteObs else CDU_LoteObs + @LoteObs end,
                            CDU_Peso = (case when cdu_Peso is null then 0 else cdu_peso end) +  @Peso,
                            CDU_QuantidadeComDefeito = (case when CDU_QuantidadeComDefeito is null then 0 else CDU_QuantidadeComDefeito end) + @QuantidadeComDefeito,
                            CDU_Notas = (case when CDU_Notas is null then 0 else CDU_Notas end) +  @Notas,
                            CDU_PesoEmbalagem = @PesoEmbalagem,
                            CDU_UnidadePeso = @UnidadePeso,
                            CDU_LoteFabrico = @LoteFabrico,
                            CDU_Largura = @Largura
                    where	Artigo = @Artigo
                            and Armazem = @Armazem
                            and Lote = @Lote
                            and Localizacao = @Localizacao";
            var sqlParameters = new List<SqlParameter>
                                            {
                                                new SqlParameter("Artigo", artigo),
                                                new SqlParameter("Armazem", armazem),
                                                new SqlParameter("Lote", lote),
                                                new SqlParameter("Localizacao", localizacao),
                                                new SqlParameter("LoteObs", GetStringLineFieldValue(sqlTransaction, id, "LinhasStk", "CDU_LoteObs")),
                                                new SqlParameter("Peso", GetSingleLineFieldValue(sqlTransaction, id, "LinhasStk", "CDU_Peso")),
                                                new SqlParameter("QuantidadeComDefeito", GetSingleLineFieldValue(sqlTransaction, id, "LinhasStk", "CDU_QuantidadeComDefeito")),
                                                new SqlParameter("Notas", GetIntLineFieldValue(sqlTransaction, id, "LinhasStk", "CDU_Notas")),
                                                new SqlParameter("PesoEmbalagem", GetSingleLineFieldValue(sqlTransaction, id, "LinhasStk", "CDU_PesoEmbalagem")),
                                                new SqlParameter("UnidadePeso", GetStringLineFieldValue(sqlTransaction, id, "LinhasStk", "CDU_UnidadePeso")),
                                                new SqlParameter("LoteFabrico", GetIntLineFieldValue(sqlTransaction, id, "LinhasStk", "CDU_LoteFabrico")),
                                                new SqlParameter("Largura", GetSingleLineFieldValue(sqlTransaction, id, "LinhasStk", "CDU_Largura"))
                                            };
            using (var sqlDataAccess = new SqlDataAccess())
                sqlDataAccess.ExecuteNonQuery(sqlTransaction, query, sqlParameters.ToArray());
        }

        public static List<StockLine> GetStockLines(SqlTransaction sqlTransaction, string id)
        {
            var dataTable = new DataTable();
            const string query = "select	Id as IdLinha," +
                                 "			Artigo, " +
                                 "			Armazem, " +
                                 "			Lote, " +
                                 "			Localizacao, " +
                                 "			Quantidade, " +
                                 "			EntradaSaida " +
                                 "from	    LinhasStk " +
                                 "where	    IdCabecOrig = @Id ";
            using (var sqlDataAccess = new SqlDataAccess())
                sqlDataAccess.Fill(sqlTransaction, dataTable, query, new SqlParameter("Id", id));
            var stockLines = new List<StockLine>();
            foreach (DataRow dataRow in dataTable.Rows)
            {
                var stockLine = new StockLine()
                {
                    IdLinha = Guid.Parse(Convert.ToString(dataRow["IdLinha"])),
                    Artigo = Convert.ToString(dataRow["Artigo"]),
                    Armazem = Convert.ToString(dataRow["Armazem"]),
                    Lote = Convert.ToString(dataRow["Lote"]),
                    Localizacao = Convert.ToString(dataRow["Localizacao"]),
                    Quantidade = Convert.ToDouble(dataRow["Quantidade"]),
                    EntradaSaida = Convert.ToString(dataRow["EntradaSaida"])
                };
                stockLines.Add(stockLine);
            }
            return stockLines;
        }
    }
}
